package com.sf.proxy.custom.dynamic.jdk;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 *  基于 JDK 的动态代理实现
 *
 *  这样黄牛就不知可以 给Me 买票了，所有人的票 它都可以帮着买
 */
public class HuangNiuProxy implements InvocationHandler {

    private Person person;

    public void setObject(Person person) {
        this.person = person;
    }

    public Person getProxy(){
        return (Person) Proxy.newProxyInstance(person.getClass().getClassLoader(),person.getClass().getInterfaces(),this);
    }


    private void before(){
        System.out.println("买票前,先收钱");
    }
    private void after(){
        System.out.println("买票后,通知用户买好了");
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object invoke = method.invoke(person, args);
        after();
        return invoke;
    }
}
